package com.ruoyi.apiserver.services.impl;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.ruoyi.apiserver.config.CozeConfig;
import com.ruoyi.apiserver.config.WxPayProperties;
import com.ruoyi.apiserver.services.ICozeServices;
import com.ruoyi.common.clients.CozeClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

@Service
public class CozeServices implements ICozeServices {

    @Autowired
    CozeConfig cozeConfig;


    @Resource
    private CozeClient cozeClient;



    @Override
    public  Map<String, Object>  getJSON(String QueryJson) {
        Map<String, Object> map = new HashMap<>();
        if (QueryJson.equals("")) {
            return map;
        }
        //我的测试结果 ESTJ ，测试原始值：{\"E\":12,\"I\":0,\"S\":12,\"N\":0,\"T\":12,\"F\":0,\"J\":12,\"P\":0}"
        String content = cozeClient.sendRequest(cozeConfig.getBotId(), cozeConfig.getToken(),QueryJson );
        JSONObject jsonResponse = new JSONObject(content);
        
        // 获取messages数组
        JSONArray messages = jsonResponse.getJSONArray("messages");
        
        // 遍历messages查找type为"answer"的消息
        for (int i = 0; i < messages.size(); i++) {
            JSONObject message = messages.getJSONObject(i);
            if ("answer".equals(message.getStr("type"))) {
                // 获取content字段中的JSON字符串
                String contentStr = message.getStr("content");
                
                // 提取JSON部分（去除markdown代码块标记）
                if (contentStr.startsWith("```json")) {
                    contentStr = contentStr.substring(7); // 去掉开头的 ```json
                }
                if (contentStr.endsWith("```")) {
                    contentStr = contentStr.substring(0, contentStr.length() - 3); // 去掉结尾的 ```
                }
                // 去除首尾空白字符
                contentStr = contentStr.trim();

                return  getJSONAsMap(contentStr);
            }
        }
        return map;
    }

    @Override
    public Object CreatTestQuestions(int Count) {
        Map<String, Object> map = new HashMap<>();

        if (Count <= 0) {
            return map;
        }
        String QueryJson="帮我生成一套 "+Count+" 题目的题库";
        String content = cozeClient.sendRequest(cozeConfig.getTestquestionsBotId(), cozeConfig.getToken(),QueryJson );
        JSONObject jsonResponse = new JSONObject(content);

        // 获取messages数组
        JSONArray messages = jsonResponse.getJSONArray("messages");

        // 遍历messages查找type为"answer"的消息
        for (int i = 0; i < messages.size(); i++) {
            JSONObject message = messages.getJSONObject(i);
            if ("answer".equals(message.getStr("type"))) {
                // 获取content字段中的JSON字符串
                String contentStr = message.getStr("content");

                // 提取JSON部分（去除markdown代码块标记）
                if (contentStr.startsWith("```json")) {
                    contentStr = contentStr.substring(7); // 去掉开头的 ```json
                }
                if (contentStr.endsWith("```")) {
                    contentStr = contentStr.substring(0, contentStr.length() - 3); // 去掉结尾的 ```
                }
                // 去除首尾空白字符
                contentStr = contentStr.trim();

                return  getJSONAsMap(contentStr);
            }
        }
        return map;
    }

    /**
     * 将JSON字符串解析为Map<String, Object>
     * @return 解析后的Map对象
     */
    public Map<String, Object> getJSONAsMap(String jsonStr) {
        if (jsonStr == null || jsonStr.isEmpty()) {
            return new HashMap<>();
        }
        
        try {
            // 将JSON字符串转换为Map<String, Object>
            JSONObject jsonObject = new JSONObject(jsonStr);
            Map<String, Object> resultMap = new HashMap<>();
            for (String key : jsonObject.keySet()) {
                resultMap.put(key, jsonObject.get(key));
            }
            
            return resultMap;
        } catch (Exception e) {
            // 如果解析失败，返回空Map
            return new HashMap<>();
        }
    }
}